/**
 * @file analyse_config_file.h
 * @author Linquan  
 * @brief 
 * @version 1.0
 * @date 2024-08-30
 * 
 * @copyright Copyright (c) 2024
 * 
 */
#ifndef CONFIG_FILE_ANALYSE_CALLBACK_H
#define CONFIG_FILE_ANALYSE_CALLBACK_H



/*===========================[Includes]======================================*/
#include "config_struct.h"
#include "../circuit_node/circuit_node.h"
/*===========================[Defines]=======================================*/

/*===========================[Macros]========================================*/


/*===========================[Typedef]=======================================*/

/**> 在解析一个配置文件中，向表格添加后续要继续配置的设备节点的回调函数 */
typedef void (*node_table_add_t)(circuit_node_t * node_ptr, uint32_t result);


/**
 * @brief 规定好配置文件的格式后，根据每种类型设备 各自配置信息的行起始位置
 *      每读取一个配置文件都使用这个结构体 创建一个变量，用于配置过程使用。
 */
typedef struct 
{
    char*           file_name;               /**> 配置文件名 */
    int             line_all_circuit_num;    /**> 存放 所有回路总数量的行号 */
    int             line_circuit_info_start; /**> 存放 回路信息总览的起始行号 */

    node_tree_ptr_t*     node_tree1;             /**> 携带一个 节点树，配置文件为该节点树上的节点进行配置*/

    uint8_t         ciucuit_nume;            /**> 该设备回路的数量,由配置文件获得 */

    uint8_t*        cfg_node_num_ptr;        /**> 指针，回路总览信息保存。,由配置文件获得，
                                            * !!!使用前需要创建一个数组并指向，进行初始化!!!
                                            * 配置文件解析结束后，与node_index_num_ptr对应回路的节点数量比较，
                                            * 防止 下方配置节点时，节点索引越界
                                            */
   /** 回调函数，用于添加当前配置节点到链表中，便于后边从链表中对该节点继续初始化 */
   node_table_add_t   node_add_callback;

}dev_type_config_info_t;

/*===========================[Global Prototypes]=============================*/
int get_circuit_number(int index, char  *token, void *data_return);
int creat_one_node_tree(int index, char  *token, void *data_return);
int  analyse_node_info(int index, char  *token, void *data_return);


#endif


